const express = require('express');
const ejs = require('ejs')
const app = express()
var bodyParser = require('body-parser')

app.engine('html', ejs.__express)
app.set('view engine', 'html')

// 配置第三方中间件
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
app.use(bodyParser.json())

// 4. 内置中间件
app.use(express.static('static'))

// 1. 应用级中间件
app.use((req, res, next) => { // 匹配任何路由
  console.log(new Date())
  next()
})

app.get("/", (req, res) => { 
  res.send('首页')
});

app.get('/login', (req, res) => {
  // req.query 获取get传值
  res.render('login', {})
})

app.post('/doLogin', (req, res) => {
  // req.body 获取post传值 第三方中间件 body-parser
  res.send('执行提交' + JSON.stringify(req.body, null, 2))
})

// 路由里面配置多级目录
app.get('/admin/user/add', (req, res) => {
  res.send('admin user add')
})

app.get('/admin/user/edit', (req, res) => {
  res.send('admin user edit')
})

// 动态路由 配置路由的时候也要注意顺序

app.get('/article/add', (req, res, next) => { // 2. 路由级中间件
  next()
})

app.get('/article/:id', (req, res) => {
  var id = req.params['id']
  res.send('动态路由' + id)
})

// 3. 错误处理中间件
app.use((req, res) => {
  res.status(404).send('404')
})

app.listen(3000) // 端口号建议写成3000以上，避免遇到占用端口的情况
